/* 
 * File:   FileService.h
 * Author: max
 *
 * Created on October 22, 2012, 4:58 AM
 */

#ifndef FILESERVICE_H
#define	FILESERVICE_H

#include <iostream>
#include <pthread.h>
#include <fstream>
#include <map>
#include <vector>
#include "server_IMensajero.h"
#include "server_IMensajeEntranteManejador.h"
#include "server_Proceso.h"
#include "server_Service.h"
#include "common_Mutex.h"


#define OK "OK"
#define ERROR "ERROR"
#define PING "PING" 
#define FIN_NOTIFICACION "\n"

using namespace std;
using namespace TP::Comunicacion;
using namespace TP::Comunicacion::Eventos;

namespace TP { namespace Servicios {

class FileService : public Service, public IMensajeEntranteManejador {

    public:

        FileService(const string& pathAu);

        virtual ~FileService();
        
        void Iniciar() throw (Excepcion&);
        
        void Finalizar() throw (Excepcion&);
        
        void mensajeEntranteManejador (IMensajero* pMensajero, const string& pMensaje);
        
    private:       

        void responderEco(IMensajero* pMensajero, vector<string> &pComando);
        
        void declareFile(IMensajero* pMensajero, vector<string> &pComando);
        
        void putFileChunk(IMensajero* pMensajero, vector<string> &pComando);
        
        void defineFile(IMensajero* pMensajero, vector<string> &pComando);        
        
        string _pathAu;
    };

}}

#endif	/* FILESERVICE_H */

